import  turtle
from datetime import *

#定义一个函数，用来表示画笔移动一段距离，移动的距离通过参数来控制
def Skip(step):
    turtle.penup()
    turtle.forward(step)
    turtle.pendown()

#定义一个函数用来绘制钟表上指针
def mkHand(name,length):
    #重置一下画笔
    turtle.reset()
    Skip(length*(-0.1))
    #绘制多边形，可以存储绘制的信息
    turtle.begin_poly()
    turtle.forward(length*1.1)
    turtle.end_poly()
    #将存储的绘制信息取出来
    handForm = turtle.get_poly()
    #将绘制信息根据名字存放起来
    turtle.register_shape(name,handForm)

#定义函数，用来设置画笔
def InitPen():
    turtle.mode('logo')
    #定义的全局变量画笔
    global secHand,minHand,hourHand,printer
    turtle.tracer(False)
    #将要绘制的表针信息存储起来
    mkHand("secHand",135)
    mkHand("minHand",110)
    mkHand("hourHand",90)
    secHand = turtle.Turtle()
    #取出对应存储的指针内容和画笔进行绑定
    secHand.shape("secHand")
    minHand = turtle.Turtle()
    minHand.shape("minHand")
    hourHand = turtle.Turtle()
    hourHand.shape("hourHand")
    #设置户画笔属性
    for hand in secHand,minHand,hourHand:
        #表示该画笔绘制的形状，水平和垂直方向都是原来的大小，外轮廓的宽度是3px
        hand.shapesize(1,1,3)
        hand.speed(0)
    #设置绘制文字的画笔
    printer = turtle.Turtle()
    #隐藏该画笔
    printer.hideturtle()
    printer.penup()
    turtle.tracer(True)
#绘制表盘信息的函数
def SetupClock(radius):
    turtle.reset()
    #设置绘制表盘画笔宽度
    turtle.pensize(7)
    # 关闭画笔追踪
    turtle.tracer(False)
    for i in range(60):
        #将画笔移动到表盘边界
        Skip(radius)
        if i%5==0:
            turtle.forward(20)
            if i == 0:
                turtle.write(int(12), align="center", font=("微软雅黑", 14, "bold"))
            elif i == 30 or i == 25 or i == 35:
                Skip(25)
                turtle.write(int(i / 5), align="center", font=("微软雅黑", 14, "bold"))
                Skip(-25)
            else:
                turtle.write(int(i / 5), align="center", font=("微软雅黑", 14, "bold"))
            # 把刻度对应数字绘制完成后，移动画笔回到原点
            Skip(-radius - 20)
        else:
            #绘制一个小圆点
            turtle.dot(5)
            if  i>=15 and i<=45:
                Skip(20)
                turtle.write(int(i % 5), align="center", font=("微软雅黑", 8, "normal"))
                Skip(-20)
            else:
                Skip(8)
                turtle.write(int(i % 5), align="center", font=("微软雅黑", 8, "normal"))
                Skip(-8)
            Skip(-radius)
        #每绘制一个刻度后，让画笔偏移一个角度
        turtle.right(6)
    turtle.tracer(True)
#定义用来对时的函数
def Tick():
    #获取系统的时间
    t = datetime.today()
    #获取秒信息
    second = t.second
    #获取分钟
    minute = t.minute+second/60
    #获取小时
    hour = t.hour + minute/60
    #根据系统时间来设置表针画笔绘制表针
    # setheading(degree),直接设置画笔旋转的角度
    secHand.setheading(second*6)
    minHand.setheading(minute*6)
    hourHand.setheading(hour*30)
    printer.forward(65)
    printer.write(Week(t), align="center", font=("Courier", 14, "bold"))
    printer.back(130)
    printer.write(Date(t), align="center", font=("Courier", 14, "bold"))
    # home()设置当前画笔位置为原点，朝向东
    printer.home()

    #设置时间间隔调用Tick
    #100ms后再次执行Tick
    turtle.ontimer(Tick,100)
def Week(t):
    week = ["星期一","星期二","星期三","星期四","星期五","星期六","星期日",]
    return week[t.weekday()]
#定义一个返回日期的函数
def Date(t):
    y = t.year
    m = t.month
    d =t.day
    return "%s-%d-%d"%(y,m,d)

def main():
    InitPen()
    SetupClock(160)
    Tick()
    turtle.mainloop()

if __name__=='__main__':
    print("这是一个测试语句")
    main()




